<?php

namespace app\store\controller;

use think\Controller;
use app\common\controller\store;
use app\common\library\Email;


//客户控制器
class Business extends Controller
{
    public function __construct()
    {
        parent::__construct();

        $this->BusinessModel = model('Business.Business');
        $this->SourceModel = model('Business.Source');

    }

    // 注册方法
    public function register()
    {
        if($this->request->isAjax())
        {
            $mobile = $this->request->param('mobile','','trim');
            $password = $this->request->param('password','','trim');

            //先获取客户来源
            /*
            ['name'=>['LIKE',"%家具商城"]]: 这是一个关联数组，用于指定查询条件。
              name: 表示要查询的字段名。
               ['LIKE',"%家具商城"]: 表示查询条件的具体内容，这里使用LIKE操作符进行模糊查询，%是通配符，代表任意字符。
               "%家具商城"：表示在name字段中查找包含“家具商城”任意位置的记录
            */
            $sourceid = $this->SourceModel->where(['name'=>['LIKE',"%家具商城"]])->value('id');

            // 生成密码盐
            //randstr这个是生成密码盐的方法，封装在公共方法这里fast/application/common.php的最下面自己封装的方法这里 
            $salt = randstr();

            // 密码进行加密
            $password = md5($password.$salt);

            // 组装数据
            // 以下的数据都是根据数据库中的字段，进行组装后插入
            $data = [
                'mobile' => $mobile,
                'nickname' =>build_encrypt($mobile,3,4,'*'), //脱敏显示
                'password' =>$password,
                'salt' => $salt,
                'gender' =>'0',
                'sourceid' => $sourceid, //来源
                'deal' =>'0', //成交状态
                'money' => '0',
                'auth' => '0' //是否有验证
            ];

            // 执行插入语句，插入成功会自动返回影响函数
            $result = $this->BusinessModel->validate('common/Business/Business')->save($data);


            /*
            error和success两个方法会识别当前是什么请求，如果执行请求为ajax，则当前请求不会执行跳转，而是会返回Json的数据结构。
            这里发送请求的是异步请求，所有返回去的就是json数据。json数据是，会返回一个code数据，成功code=1,失败code=0。
            */
            if($result === FALSE)
            {
                $this->error($this->BusinessModel->getError());
                die;
            }else
            {
                $this->success('注册成功','/business/login');
            }





        }
    }

    // 登录方法
    public function login()
    {
        if($this->request->isAjax())
        {
            $mobile = $this->request->param('mobile','','trim');
            $password = $this->request->param('password','','trim');

            // 根据手机好查询用户是否存在
            $business = $this->BusinessModel->where(['mobile'=> $mobile])->find();

            // 用户，在数据库找不到这个用户
            if(!$business)
            {
                $this->error('该手机号用户不存在');
                die;
            }

            // 密码，判断是否为空
            if(empty($password))
            {
                $this->error('密码不能为空');
                die;
            }

            // 密码，验证是否正确
            $salt = $business['salt']; //每次登录一次，都生成新的密码盐
            $repass = md5($password.$salt);

            // 如果加密的密码和数据库的密码要是不一致就说明密码错误
            if($repass != $business['password'])
            {
                $this->error('密码错误');
                die;
            }
            
            // 删除密码盐和密码
            unset($business['salt']); // 每次登录的时候随机生成新的密码盐，所有登录成功以后本次登录生成的密码盐将会被删除掉，下次登陆将重新生成新的密码盐
            unset($business['password']); //密码不返回，删除掉

            $this->success('登录成功','/business/index',$business);
            die;
        }
    }

    // 判断是否有登录
    public function check()
    {
        if($this->request->isAjax())
        {
            // 接收参数
            $id = $this->request->param('id','','trim');
            $mobile = $this->request->param('mobile','','trim');

            //判断是否有这个用户
            if(!$id || empty($mobile))
            {
                $this->error('请重新登录','','trim');
                die;
            }

            //根据id和手机号   找出具体人
            $where = ['id'=>$id, 'mobile' => $mobile];
            $business = $this->BusinessModel->where($where)->find();

            // 如果是未登录
            if(!$business)
            {
                $this->error('非法登录','/business/login');
                die;
            }

            // 检查完之后删除掉密码和密码盐
            unset($business['salt']);
            unset($business['password']);

            $this->success('用户存在',null,$business);
            die;
        }
    }

    //个人资料
    public function profile()
    {
        if($this->request->isAjax())
        {
            // $data = $this->request->param();
            // var_dump($data);
            // die;

            // 接收数据
            $id = $this->request->param('id',0,'trim');
            $nickname = $this->request->param('nickname','','trim');
            $mobile = $this->request->param('mobile','','trim');
            $gender = $this->request->param('gender','','trim');
            $email = $this->request->param('email','','trim');
            $password = $this->request->param('password','','trim');
            $code = $this->request->param('code','','trim');

            
            
            $business = $this->BusinessModel->find($id);

            if(!$business)
            {
                $this->error('用户不存在');
                die;
            }

            // 组转数据
            $data =[
                'id' => $id,
                'nickname' => $nickname,
                'mobile' => $mobile,
                'email' => $email, //需要认证状态
                'gender' => $gender,
               
            ];

            // 判断密码
            if(!empty($password))
            {
                // 重新生成密码盐
                $salt = build_ranstr(10);
                $repass = md5($password.$salt);
                $data['salt'] = $salt;
                $data['password'] = $repass;
            }

            // 邮箱 判断认证状态
            // 邮箱是需要认证的，如果邮箱和原来邮箱不相等，则让他重新认证
            if($business['email'] != $email)
            {
                // 认证状态设置为0
                $data['auth'] = '0';
            }

            // 判断地区
            if(!empty($code))
            {
               
                // 使用模型Region，它操作数据库当中的region地区表
                $parent = model('Region')->where(['code' => $code])->value('parentpath');

                // var_dump($parent);
                // die;

                // 将字符串传转化为数组
                $list = explode(',', $parent);

                $data['province'] = isset($list[0]) ? $list[0] : null;
                $data['city'] = isset($list[1]) ? $list[1] : null;
                $data['district'] = isset($list[2]) ? $list[2] : null; 
            }   

            // 判断是否有图片上传
            if(isset($_FILES['avatar']) && $_FILES['avatar']['error'] == 0)
            {
                $success = build_upload('avatar');

                if($success['code'])
                {
                    $data['avatar'] = $success['data'];
                }else
                {
                    $this->error($success['msg']);
                    die;
                }
            }

            //更新
            // 验证器里面也有点拼接起来表示验证场景
            $result = $this->BusinessModel->validate('common/Business/Business.profile')->isUpdate(true)->save($data);

            if($result === FALSE)
            {
                $this->error($this->BusinessModel->getError());
                die;
            }

            
            //更新成功，判断是否有旧图片  如果有就删除
            if(isset($data['avatar']))
            {
                // 判断它是否是一张图片，如果是就删除
                @is_file(".".$business['avatar']) && @unlink(".".$business['avatar']);

            }
            $this->success('更新成功','/business/index');
            die;

        }
        
    }




}
